﻿using System.Collections.Generic;
using GigaSite.Domain.Entities;
using GigaSite.Domain.Enums;

namespace GigaSite.Domain.Interfaces.Repositories
{
    /// <summary>
    /// Абстрактный репозиторий жалоб
    /// </summary>
    public interface IAbusesRepository: IBaseRepository<Abuse>
    {
        /// <summary>
        /// Получает все необработанные жалобы
        /// </summary>
        /// <returns>Коллекция необработанных жалоб</returns>
        IEnumerable<Abuse> GetUnprocessedAbuses();

        /// <summary>
        /// Проверяет, отправлял ли пользователь уже жалобу на указанный объект
        /// </summary>
        /// <param name="user">Пользователь</param>
        /// <param name="type">Тип объекта</param>
        /// <param name="entityId">Идентификатор объекта</param>
        /// <returns>true = если жалоба уже была подана и необработана</returns>
        bool HasAbuseFromUser(User user, AbuseTypes type, long entityId);

        /// <summary>
        /// Подает жалобу от указанного пользователя на указанный объект
        /// </summary>
        /// <param name="type">Тип жалобы</param>
        /// <param name="user">Пользователь от которого подается жалоба</param>
        /// <param name="entityId">Идентификатор сушности</param>
        /// <param name="message">Сообщение</param>
        Abuse AddAbuse(AbuseTypes type, User user, long entityId, string message);
    }
}